๐Ÿš€ Java ์ค‘๊ธ‰ 1ํŽธ ํ•ต์‹ฌ ์š”์•ฝ ์ด์ •๋ฆฌ

NOTE

Object ํด๋ž˜์Šค, ๋ถˆ๋ณ€ ๊ฐ์ฒด, String, ๋ž˜ํผ/Enum, java.time, ์ค‘์ฒฉ/์ต๋ช… ํด๋ž˜์Šค, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ Java ์ค‘๊ธ‰ 1ํŽธ ํ•ต์‹ฌ ์š”์•ฝ.

๐Ÿ“Œ ๊ฐœ๋…

1. Object ํด๋ž˜์Šค: ๋ชจ๋“  ๊ฐ์ฒด์˜ ๋ฟŒ๋ฆฌ

  • ๊ฐœ๋…: ์ž๋ฐ”์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ์ตœ์ƒ์œ„ ๋ถ€๋ชจ์ธ Object๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?: ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ , ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹คํ˜•์„ฑ์˜ ์ •์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ต์‹ฌ ๋ฉ”์„œ๋“œ:
    • toString(): ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ (๋””๋ฒ„๊น… ํ•„์ˆ˜).
    • equals(): **๋™์ผ์„ฑ(==, ์ฃผ์†Œ๊ฐ’)**์ด ์•„๋‹Œ ๋™๋“ฑ์„ฑ(๋…ผ๋ฆฌ์  ๊ฐ™์Œ) ๋น„๊ต๋ฅผ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•„์š”.
    • hashCode(): equals๋ฅผ ์žฌ์ •์˜ํ–ˆ๋‹ค๋ฉด ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์ปฌ๋ ‰์…˜์„ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•จ๊ป˜ ์žฌ์ •์˜.

2. ๋ถˆ๋ณ€ ๊ฐ์ฒด (Immutable Object): ์•ˆ์ „ํ•œ ๊ณต์œ 

  • ๊ฐœ๋…: ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ๋‚ด๋ถ€์˜ ์ƒํƒœ(ํ•„๋“œ)๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด.
  • ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?: ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” **์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ(Side Effect)**๋ฅผ ์›์ฒœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ต์‹ฌ ์„ค๊ณ„:
    • ํ•„๋“œ๋ฅผ final๋กœ ์„ ์–ธํ•˜๊ณ  Setter๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Œ.
    • ๊ฐ’ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋ฉด ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋Œ€์‹ , ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜.

3. String ํด๋ž˜์Šค: ๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ๊ฒƒ

  • ํŠน์ง•: ์ž๋ฐ”์˜ String์€ ๋Œ€ํ‘œ์ ์ธ ๋ถˆ๋ณ€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • String Pool: ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์€ ํž™ ์˜์—ญ์˜ ์ „์šฉ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”:
    • ๋‹จ์ˆœ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ตœ์ ํ™”ํ•ด ์ฃผ์ง€๋งŒ, ๋ฐ˜๋ณต๋ฌธ ๋‚ด ์—ฐ๊ฒฐ์€ ๋ฐ˜๋“œ์‹œ StringBuilder๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • StringBuilder๋Š” ๊ฐ€๋ณ€(Mutable)์ด๋ฏ€๋กœ ๋‚ด๋ถ€ ๋ฒ„ํผ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.

4. ๋ž˜ํผ ํด๋ž˜์Šค & Enum: ํƒ€์ž… ์•ˆ์ „์„ฑ

  • Wrapper Class: int ๊ฐ™์€ ๊ธฐ๋ณธํ˜•์„ Integer ๊ฐ™์€ ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ. null ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ œ๋„ค๋ฆญ์—์„œ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. (์˜คํ†  ๋ฐ•์‹ฑ/์–ธ๋ฐ•์‹ฑ ์ง€์›)
  • Enum (์—ด๊ฑฐํ˜•): ๊ด€๋ จ ์žˆ๋Š” ์ƒ์ˆ˜๋ฅผ ๋ชจ์•„ ์ •์˜ํ•œ ํŠน์ˆ˜ํ•œ ํด๋ž˜์Šค.
    • ์žฅ์ : ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ’์ด ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ง‰์•„์ฃผ๋Š” ํƒ€์ž… ์•ˆ์ „์„ฑ ์ œ๊ณต.
    • ํ™œ์šฉ: ๋‹จ์ˆœ ์ƒ์ˆ˜๋ฅผ ๋„˜์–ด ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‚ดํฌํ•  ์ˆ˜ ์žˆ์Œ.

5. ๋‚ ์งœ์™€ ์‹œ๊ฐ„ (java.time): ํ‘œ์ค€ API

  • ๊ฐœ๋…: Java 8๋ถ€ํ„ฐ ๋„์ž…๋œ LocalDate, LocalDateTime ๋“ฑ.
  • ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?: ๊ธฐ์กด Date, Calendar์˜ ๊ฒฐํ•จ(๊ฐ€๋ณ€์„ฑ, ๋ณต์žกํ•œ ์›” ๊ณ„์‚ฐ ๋“ฑ)์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž….
  • ํ•ต์‹ฌ ํŠน์ง•:
    • ๋ถˆ๋ณ€(Immutable): ๋ชจ๋“  ๊ณ„์‚ฐ ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•จ.
    • ๋ช…ํ™•์„ฑ: Period(๋‚ ์งœ ์ฐจ์ด), Duration(์‹œ๊ฐ„ ์ฐจ์ด) ๋“ฑ์œผ๋กœ ๊ตฌ๋ถ„์ด ๋ช…ํ™•ํ•จ.

6. ์ค‘์ฒฉ & ์ต๋ช… ํด๋ž˜์Šค: ์บก์Аํ™”์˜ ๊ทน์น˜

  • ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค: ์™ธ๋ถ€ ํด๋ž˜์Šค์™€ ๋ฐ€์ ‘ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค ๊ฐ„ ๊ณต์œ ๊ฐ€ ์—†์„ ๋•Œ ์‚ฌ์šฉ.
  • ๋‚ด๋ถ€ ํด๋ž˜์Šค: ์™ธ๋ถ€ ์ธ์Šคํ„ด์Šค์˜ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ.
  • ์ต๋ช… ํด๋ž˜์Šค: ์ด๋ฆ„ ์—†์ด ์ฆ‰์„์—์„œ ์ธํ„ฐํŽ˜์ด์Šค/ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„. ์ผํšŒ์„ฑ ๋กœ์ง์— ์“ฐ์ด๋ฉฐ, ์ž๋ฐ” 8๋ถ€ํ„ฐ๋Š” **๋žŒ๋‹ค(Lambda)**๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ.

7. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (Exception): ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐฉ์–ด๋ง‰

  • ์˜ˆ์™ธ ๊ณ„์ธต: Throwable โ†’ Error(์‹œ์Šคํ…œ ์žฅ์• ) & Exception(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ์™ธ).
  • ์ฒดํฌ ์˜ˆ์™ธ vs ์–ธ์ฒดํฌ ์˜ˆ์™ธ:
    • Checked: ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•จ. ์™ธ๋ถ€์— ์˜์กดํ•˜๋Š” ๋กœ์ง์— ์‚ฌ์šฉ.
    • Unchecked (RuntimeException): ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ. ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ•์ œ๋˜์ง€ ์•Š์Œ.
  • Try-With-Resources: AutoCloseable์„ ๊ตฌํ˜„ํ•œ ์ž์›์„ ์ž๋™์œผ๋กœ ๋‹ซ์•„์คŒ (๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€).

๐Ÿ“Ž ํ•™์Šต ํ›„๊ธฐ

โ€œ์ž๋ฐ” ์ค‘๊ธ‰ 1ํŽธ์€ ๋‹จ์ˆœํžˆ ๋ฌธ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ณผ์ •์ด ์•„๋‹ˆ๋ผ, **๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ•ต์‹ฌ์ธ โ€˜๋ถˆ๋ณ€์„ฑโ€™๊ณผ โ€˜ํƒ€์ž… ์•ˆ์ „์„ฑโ€™**์„ ์–ด๋–ป๊ฒŒ ์‹ค๋ฌด ์ฝ”๋“œ๋กœ ๋…น์—ฌ๋‚ด๋Š”์ง€ ๋ฐฐ์šฐ๋Š” ๊ณผ์ •์ด์—ˆ๋‹ค.โ€